Fix WorkshopsController#rsvp 500 when member already has a nil-attending invitation - #2791
Merged
Merged
Conversation
mroderick
marked this pull request as ready for review
August 7, 2026 09:41
KimberleyCook
approved these changes
Aug 7, 2026
olleolleolle
reviewed
Aug 7, 2026
olleolleolle
reviewed
Aug 7, 2026
Co-authored-by: Olle Jonsson <olle.jonsson@gmail.com>
Co-authored-by: Olle Jonsson <olle.jonsson@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #2790
Summary
Fixes a 500 error when a member clicks Attend as a coach/student on a workshop where they already have a
WorkshopInvitationrow for that workshop + role withattendingNULL.Root cause
find_or_create_invitationusedWorkshopInvitation.create_or_find_by. In Rails 8.1,create_or_find_bycalls the non-bangcreate. When the uniqueness validation fails (row already exists), it returns an unpersisted record withid: nil. The subsequentredirect_to invitation_path(@invitation)then raisesActionController::UrlGenerationError.Fix
After
create_or_find_by, checkpersisted?. If the record is not persisted, fall back toWorkshopInvitation.find_by(workshop:, member:, role:)to return the existing row.Verification
spec/controllers/workshops_controller_spec.rbcovering:bundle exec rspec spec/controllers/workshops_controller_spec.rb— 4 examples, 0 failuresbundle exec rspec spec/controllers/ spec/requests/— 136 examples, 0 failuresbundle exec rubocop app/controllers/workshops_controller.rb spec/controllers/workshops_controller_spec.rb— no offensesPost-Deploy Monitoring & Validation
ActionController::UrlGenerationErrorwithcontroller: "workshop_invitation", id: nilinWorkshopsController#rsvp.find_by(e.g. unique index vs validation mismatch).